// GNU (L)GPLv3+ here.

#ifndef MaxsiGameLoop_H
#define MaxsiGameLoop_H

BeginMaxsiNamespace

//=============================================================================
// Logic threads.
//=============================================================================
float	GetLogicGameTime();
float	GetLogicDeltaTime();
float	GetLogicFPS();
size_t	GetLogicFrameNum();
void	InitLogicGameTime();
void	UpdateLogicGameTime();
void	CalculateLogicFPS();

//=============================================================================
// Rendering thread.
//=============================================================================
float	GetRenderGameTime();
float	GetRenderDeltaTime();
float	GetRenderFPS();
size_t	GetRenderFrameNum();
void	InitRenderGameTime();
void	UpdateRenderGameTime();
void	CalculateRenderFPS();

MaxsiError CreateScene();
MaxsiError DeleteScene();
MaxsiError CreateSceneUpdateJobs();
MaxsiError CreateSceneRenderJobs();
MaxsiError CreatePhysicsUpdateJobs();
MaxsiError OnNewFrame();
MaxsiError OnSceneUpdated();
MaxsiError OnSceneRendered();
MaxsiError OnPhysicsUpdated();

MaxsiError EntityUpdateJob(size_t ThreadId, BYTE* Parameter);
MaxsiError EntityPhysicsJob(size_t ThreadId, BYTE* Parameter);
MaxsiError EntityDrawJob(size_t ThreadId, BYTE* Parameter);

EndMaxsiNamespace

#endif
